#!/usr/bin/env python3

class Student:
    #  只要定义__init__方法初始化成员, 以下定义可省略
    #  name = "tom"
    #  age = 16
    #  sex = 'A'

    @staticmethod
    def run():
        #  静态方法, 不用实例对象直接使用类对象去调用, 但也可以通过实例对象来调用
        #  静态方法应用于操作静态数据
        print("run.....")

    @classmethod
    def show(cls):
        #  类方法, 与静态方法一样，只不过会自动将类对象传入此方法中
        print("show.....")

    def __init__(self, name='tom', age=16, sex='A'):
        #构造方法
        print("init....")
        self.name = name
        self.age = age
        self.sex = sex

    def say(self):
        #  类的常规方法
        print("say self: ", id(self))
        print(self.name, self.age, self.sex)


def main():
    s = Student("张三", 20)
    Student.run()
    s.run()
    s.name = "张三"
    s.age = 20
    print("main s: ", id(s))
    s.say()

    o = Student("王二", 40, 'A')
    print("main 1 o: ", id(o))
    o.say()
    o.name = "李四"
    o.age = 22
    o.sex = 'B'
    print("main 2 o: ", id(o))
    o.say()

if __name__ == "__main__":
    main()
